package com.springframework.sample.p1.ioc.c1;

import org.springframework.context.support.ClassPathXmlApplicationContext;

import com.springframework.sample.ASpringSample;

/**
 * Teste:
 * 
 * @author Stéphane Cottin
 */
public class Sample1 extends ASpringSample{

    /*
     * (non-Javadoc)
     * @see com.springframework.sample.SpringSample#testContent()
     */
    @Override
    public void sampleContent(){
        /**
         * On charge l'ensemble le context Spring dont la configuration est situé:
         *  - A partir de la racine du classpath, dans le fichier spring/p1/ioc/sample-1-config.xml
         */
        ClassPathXmlApplicationContext context = new ClassPathXmlApplicationContext("classpath:/spring/p1/ioc/sample-1-config.xml");

        try{
            // 1 - 
            // On récupère l'ensemble des bean Spring initialisé par ce context Spring
            String[] beanNames = context.getBeanDefinitionNames();
            
            log.debug("1) Liste des beans Spring initiés dans le context");
            for(String beanName: beanNames){
                Object bean = context.getBean(beanName);
                log.debug("  {} ==> {}", beanName, bean);
            }
            log.debug("");
            
            
            // 2 - 
            // On récupère un bean en particulier
            Object bean = context.getBean("beanTest1");
            log.debug("2) Le bean [beanTest1] ==> {}", bean);
            log.debug("");
            
            
            // 3 -
            //On récupère un bean en particulier
            Object bean2 = context.getBean("beanTest2");
            log.debug("3) Le bean [beanTest2] ==> {}", bean2);
            log.debug("");
            
            // 4 -
            // On récupère un bean en particulier
            Object bean3 = context.getBean("beanTest3");
            log.debug("4) Le bean [beanTest3] ==> {}", bean3);
            log.debug("");
            
            // 5 -
            // On récupère un bean en particulier
            Object bean4 = context.getBean("beanTest1-2");
            log.debug("5) Le bean [beanTest1-2] ==> {}", bean4);
            log.debug("   Le bean [beanTest1] == [beanTest1-2] ? ==> {}", bean.equals(bean4));
            log.debug("");
        }catch(Exception e){
            log.warn("Erreur", e);
         }finally{
             if(context != null){
                 context.close();
             }
         }
    }

    
    /*
     * (non-Javadoc)
     * @see com.springframework.sample.SpringSample#getSampleName()
     */
    @Override
    public String getSampleName(){
        return "Base de Spring IOC - 1";
    }

    
    /*
     * (non-Javadoc)
     * @see com.springframework.sample.SpringSample#getSampleDescription()
     */
    @Override
    public String[] getSampleDescription(){
        return new String[]{
                            "Création et utilisation d'un fichier de config Spring",
                            "Démarrage d'un context Spring manuellement",
                            "Récupération de bean Spring",
                            "Configuration d'un bean Spring en XML et différentes propriétés"
                            };
    }
    
    
    /**
     * Classe auto executable
     */
    public static void main(String[] args){
        ASpringSample ss = new Sample1();
        ss.doTestSample();
    }
}